import 'package:flutter/material.dart';

/// 编辑器底部的状态栏组件。
///
/// 用于展示：
/// - 左侧：字符数、行号与列号；
/// - 右侧：文件编码、换行符类型、Tab 宽度。
///
/// 可通过构造参数传入相关数据；默认编码为 `UTF-8`，
/// 换行符为 `LF`，Tab 宽度为 `2`。
class StatusBar extends StatelessWidget {
  /// 当前光标所在行。
  final int line;

  /// 当前光标所在列。
  final int column;

  /// 文本总字符数。
  final int charCount;

  /// 文本编码（默认：UTF-8）。
  final String encoding;

  /// 换行符类型（"LF" 或 "CRLF"）。
  final String lineEnding;

  /// Tab 对应的空格数（默认：2）。
  final int tabSize;

  const StatusBar({
    super.key,
    required this.line,
    required this.column,
    required this.charCount,
    this.encoding = 'UTF-8',
    this.lineEnding = 'LF',
    this.tabSize = 2,
  });

  @override
  Widget build(BuildContext context) {
    final colorScheme = Theme.of(context).colorScheme;
    return Container(
      height: 32,
      width: double.infinity,
      alignment: Alignment.center, // 整体上下居中
      decoration: BoxDecoration(
        color: colorScheme.surfaceContainerHighest,
      ),
      padding: const EdgeInsets.symmetric(horizontal: 16),
      child: Row(
        crossAxisAlignment: CrossAxisAlignment.center, // Row 内居中
        children: [
          // 左侧：字数 + 行列号
          Row(
            mainAxisSize: MainAxisSize.min,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              _StatusBarItem('$charCount chars'),
              const _StatusBarSeparator(),
              _StatusBarItem('Ln $line, Col $column'),
            ],
          ),
          const Spacer(),
          // 右侧：编码、换行符、Tab Size
          Row(
            mainAxisSize: MainAxisSize.min,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              _StatusBarItem(encoding),
              const _StatusBarSeparator(),
              _StatusBarItem(lineEnding),
              const _StatusBarSeparator(),
              _StatusBarItem('Tab Size: $tabSize'),
            ],
          ),
        ],
      ),
    );
  }
}

/// 状态栏中的单个文本项。
class _StatusBarItem extends StatelessWidget {
  final String text;
  const _StatusBarItem(this.text);

  @override
  Widget build(BuildContext context) {
    final colorScheme = Theme.of(context).colorScheme;
    return Padding(
      padding: const EdgeInsets.symmetric(horizontal: 4.0),
      child: Text(
        text,
        textAlign: TextAlign.center,
        style: TextStyle(
          color: colorScheme.onSurfaceVariant,
          fontSize: 13,
          height: 1.0, // 行高贴合容器
        ),
      ),
    );
  }
}

/// 状态栏项之间的分隔符。
///
/// 目前使用制表符字符串 `\t\t` 模拟间距，
/// 并采用弱化的次要文字颜色。
class _StatusBarSeparator extends StatelessWidget {
  const _StatusBarSeparator();

  @override
  Widget build(BuildContext context) {
    final colorScheme = Theme.of(context).colorScheme;
    return Text(
      '\t\t',
      textAlign: TextAlign.center,
      style: TextStyle(
        color: colorScheme.onSurfaceVariant.withValues(alpha: 0.55),
        fontSize: 13,
        height: 1.0,
      ),
    );
  }
}
